/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.edu.fatecmm.cadastrofilmes.banco;

import br.edu.fatecmm.cadastrofilmes.beans.BnGenero;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
/**
 *
 * @author marcosnava
 */
public class GeneroDAO {
    private Connection conn;

    public GeneroDAO() throws Exception
    {
        try
        {
            this.conn = ConnectionFactory.getConnection();
        }
        catch(Exception e)
        {
            throw new Exception(e.getMessage());
        }
    }

    public void salvar(BnGenero bnGenero) throws Exception
    {
        PreparedStatement ps = null;
        Connection conn = null;
        if(bnGenero == null)
            throw new Exception("O valor passado não pode ser nulo");

        try
        {   //não possui o id no INSERT pq pode dar problema na chave
            //primária.
            String SQL = "INSERT INTO genero (descricao) VALUES (?)";
            conn = this.conn;
            ps = conn.prepareStatement(SQL);
            //ps.setInt(1, bnGenero.getId());
            ps.setString(1, bnGenero.getDescricao());
            ps.executeUpdate();
        }
        catch(SQLException sqle)
        {
            throw new Exception("Erro ao inserir dados: " + sqle);
        }
        finally
        {
            ConnectionFactory.closeConnection(conn, ps);
        }
    }

    public void atualizar(BnGenero bnGenero) throws Exception
    {
        PreparedStatement ps = null;
        Connection conn = null;

        if(bnGenero == null)
            throw new Exception("O valor passado não pode ser nulo");

        try
        {
            String SQL = "UPDATE genero SET descricao = ? WHERE id = ?";
            conn = this.conn;
            ps = conn.prepareStatement(SQL);
            ps.setString(1, bnGenero.getDescricao());
            ps.setInt(2, bnGenero.getId());

            ps.executeUpdate();
        }
        catch(SQLException sqle)
        {
            throw new Exception("Erro ao atualizar dados: " + sqle);
        }
        finally
        {
            ConnectionFactory.closeConnection(conn, ps);
        }
    }

    public List todos() throws Exception
    {
        PreparedStatement ps = null;
        Connection conn = null;
        ResultSet rs = null;

        try
        {
            conn = this.conn;
            ps = conn.prepareStatement("SELECT * FROM genero ORDER BY descricao");
            rs = ps.executeQuery();
            List<BnGenero> lista = new ArrayList<BnGenero>();
            while(rs.next())
            {
                int id = rs.getInt("id");
                String descricao = rs.getString("descricao");
                
                BnGenero bnGenero = new BnGenero(id,descricao);

                lista.add(bnGenero);
            }
            return lista;
        }
        catch(SQLException sqle)
        {
            throw new Exception(sqle);
        }
        finally
        {
            ConnectionFactory.closeConnection(conn, ps, rs);
        }
    }

    public BnGenero procurar(int id) throws Exception
    {
        PreparedStatement ps = null;
        Connection conn = null;
        ResultSet rs = null;

        try
        {
            conn = this.conn;
            ps = conn.prepareStatement("SELECT * FROM genero WHERE id = ?");
            ps.setInt(1, id);
            rs = ps.executeQuery();
            if(!rs.next())
            {
                throw new Exception("Não foi encontrado nenhum "
                        + "registro com o ID: " + id);
            }

            String descricao = rs.getString("descricao");
            
            BnGenero bnGenero = new BnGenero(id, descricao);
            
            return bnGenero;
        }
        catch(SQLException sqle)
        {
            throw new Exception(sqle);
        }
        finally
        {
            ConnectionFactory.closeConnection(conn, ps, rs);
        }
    }

    public void excluir(BnGenero bnGenero) throws Exception
    {
        PreparedStatement ps = null;
        Connection conn = null;

        if(bnGenero == null)
        {
            throw new Exception("O valor passado não pode ser nulo");
        }

        try
        {
            conn = this.conn;
            ps = conn.prepareStatement("DELETE FROM genero WHERE id = ?");
            ps.setInt(1, bnGenero.getId());
            ps.executeUpdate();
        }
        catch(SQLException sqle)
        {
            throw new Exception("Erro ao excluir dados: " + sqle);
        }
        finally
        {
            ConnectionFactory.closeConnection(conn, ps);
        }
    }
}
